package common

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

// omitempty如果字段的值为空值（定义为 false、0、nil 指针、nil 接口值以及任何空数组、切片、映射或字符串)，该选项在编码期间忽略该字段
// "-"标签在编码和解码时总是省略字段
type Result struct {
	Code    int         `json:"code"`
	Message string      `json:"message"`
	TraceNo string      `json:"traceNo"`
	Data    interface{} `json:"data,omitempty"` //omitempty当data为空时,不展示这个字段
}

// 成功的方法
func ResponseSuccess(c *gin.Context, data interface{}) {
	result := Result{
		Code:    10000,
		Message: "success",
		TraceNo: GetTraceNo(c),
		Data:    data,
	}
	c.JSON(http.StatusOK, result)
}

// 失败的方法
func ResponseError(c *gin.Context, data interface{}) {
	result := Result{
		Code:    99999,
		Message: "error",
		TraceNo: GetTraceNo(c),
		Data:    data,
	}
	c.JSON(http.StatusOK, result)
}

// 获取traceNo,用于链路追踪
func GetTraceNo(c *gin.Context) string {
	traceNoAny, exists := c.Get(TRACE_NO)
	if exists {
		traceNo := traceNoAny.(string)
		return traceNo
	}
	return ""
}
